\section{Tests}

\subsection{Tests prédéfinis}


La bibliothèque implémentée devait passer un certain nombre de tests vérifiant sa conformité vis à vis du sujet, mais aussi ses fonctionnalités. Notre bibliothèque passe avec succès tous les tests fournis dans le sujet.
Mieux encore : la bibliothèque créée pour le projet dépasse la bibliothèque \textit{pthread} sur le test de calcul du $n$\up{ième} élément de la suite de Fibonacci ! En effet, le calcul s'effectue sans problème jusqu'au $22$\up{ième} terme; alors qu'en utilisant \textit{pthread}, le temps d'exécution du programme s'envole dès le $13$\up{ième} terme.


\subsection{Tests complémentaires}

D'autre part, plusieurs autres tests on été implémentés pour justifier de l'efficacité de notre bibliothèque de theads. Le premier consiste simplement à sommer l'ensemble des éléments d'un tableau (dans notre cas, chaque élément vaut $1$) de grande taille découpé en parties de tailles égales entre les différents threads. On vérifie ensuite que la somme obtenue est bien égale à la somme théorique (dans notre cas, cette dernière doit être égale à la longueur du tableau). Avec notre implémentation des threads, on peut monter jusqu'à 1024 threads créés en même temps alors qu'en utilisant la bibliothèque pthread, la limite tombe à 256.

Le deuxième test ajouté est le problème du voyageur de commerce. A partir des positions de $N$ villes, la ville $1$ étant le point de départ, notre programme doit calculer le plus court chemin (en utilisant les distances spatiales) passant une et une seule fois par chaque ville. L'idée est de paralléliser le parcours du graphe afin d'accélérer le calcul du plus court chemin partant de $1$ et passant par toutes les autres villes.

Le dernier test ajouté à été celui du tri fusion dans sa version parallèle. Dans un tableau de longueur $2^{N}$, on commence par créer $N$ threads. Le thread $i$ ordonne les éléments d'indices $2i$ et $2i+1$. Puis on divise $N$ par $2$ pour créer de nouveaux threads qui vont faire un tri en temps linéaire des sous-tableaux. Ainsi, pour $N/2$ threads, on a $N$ sous-tableaux de taille $2$, et le $i$\up{ième} thread effectue le tri linéaire des sous-tableaux $2i$ et $2i+1$. Il suffit alors de répéter cette opération jusqu'à n'obtenir qu'un seul thread qui trie deux sous-tableaux de taille $N$. On retrouve finalement notre tableau initial de taille $2^{N}$ et trié.


\subsection{Valgrind}
Les tests précédemment évoqués ont également été lancés sous la supervision du logiciel \textit{Valgrind}. Comme attendu, la bibliothèque de thread créée n'est source d'aucune fuite mémoire.
